<!DOCTYPE html>
<html lang="zh-CN">





<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/blogfavicon.ico">
  <link rel="icon" type="image/png" href="/img/blogfavicon.ico">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="description" content="触类旁通">
  <meta name="author" content="Charles Chan">
  <meta name="keywords" content="">
  <title>Git的使用教程(一) - 茶礼查理茬哩の世界</title>

  <link  rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.4.1/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.staticfile.org/github-markdown-css/4.0.0/github-markdown.min.css" />
  <link  rel="stylesheet" href="/lib/hint/hint.min.css" />

  
    <link  rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/10.0.0/styles/github-gist.min.css" />
  

  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_yg9cfy8wd6.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_pjno9b9zyxs.css">


<link  rel="stylesheet" href="/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script  src="/js/utils.js" ></script>
<meta name="generator" content="Hexo 4.2.0"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand"
       href="/">&nbsp;<strong>ReLoad</strong>&nbsp;</a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/links/">
                <i class="iconfont icon-link-fill"></i>
                友链
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" data-toggle="modal" data-target="#modalSearch">&nbsp;&nbsp;<i
                class="iconfont icon-search"></i>&nbsp;&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="view intro-2" id="background" parallax=true
         style="background: url('/img/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="container text-center white-text fadeInUp">
            <span class="h2" id="subtitle">
              
            </span>

            
              
  <div class="mt-3 post-meta">
    <i class="iconfont icon-date-fill" aria-hidden="true"></i>
    <time datetime="2020-05-04 23:41">
      2020年5月4日 晚上
    </time>
  </div>


<div class="mt-1">
  
    
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      1.8k 字
    </span>
  

  
    
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      20
       分钟
    </span>
  

  
  
</div>

            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid">
  <div class="row">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-md">
      <div class="container nopadding-md" id="board-ctn">
        <div class="py-5" id="board">
          <div class="post-content mx-auto" id="post">
            
            <article class="markdown-body">
              <h2 id="BEGIN"><a href="#BEGIN" class="headerlink" title="BEGIN"></a>BEGIN</h2><p>本文基于<code>Pro Git</code>中文版做个人记录使用</p>
<h2 id="Git介绍"><a href="#Git介绍" class="headerlink" title="Git介绍"></a>Git介绍</h2><p><code>Git</code>作为一个版本控制器，用于记录一个或多个文件的内容变化。区别于<code>SVN</code>和<code>CVS</code>这类集中化版本控制系统，<code>Git</code>是分布式的。</p>
<h3 id="SVN版本控制服务器的优缺点"><a href="#SVN版本控制服务器的优缺点" class="headerlink" title="SVN版本控制服务器的优缺点"></a>SVN版本控制服务器的优缺点</h3><p><code>SVN</code>的优点是存放在单一的服务器，便于项目的管理。<br><code>SVN</code>的缺点是中央服务器的单点故障。一旦中央服务器故障宕机，则所有人无法协同工作，只能手动进行版本更新。最糟糕的情况是中央服务器磁盘损坏且并未做备份，导致版本数据丢失。<br><code>SVN</code>每次存的都是版本差异，所需硬盘空间会相对较少，但是回滚速度也会很慢。  </p>
<h3 id="分布式版本控制"><a href="#分布式版本控制" class="headerlink" title="分布式版本控制"></a>分布式版本控制</h3><p>客户端并不只提取最新版本的文件快照，而是把代码仓库都完整的镜像下来。<br>这类系统能指定和若干个不同的远端代码仓库进行交互，实现同一个项目允许不同工作小组相互协作。<br>分布式存放的不是项目版本与版本的差异，而是存放索引（所需的磁盘空间很少），所以每个客户端都能放下整个项目的历史记录，回滚速度迅速。<br><code>Git</code>由于项目在每个人的本地都存在，即使断网后，仍能进行继续协同工作。</p>
<h2 id="Git安装与配置"><a href="#Git安装与配置" class="headerlink" title="Git安装与配置"></a>Git安装与配置</h2><h3 id="Git安装"><a href="#Git安装" class="headerlink" title="Git安装"></a>Git安装</h3><p>这部分网上有许多资料，且没有什么技术含量，这里就不予以介绍。</p>
<p>值得首先一提的是，<code>Git</code>区别于<code>DOS</code>命令（<code>CMD</code>），使用的是<code>Linux</code>命令。使用<code>Git</code>的第一步是初始化<code>Git</code>的配置。</p>
<h3 id="Git配置"><a href="#Git配置" class="headerlink" title="Git配置"></a>Git配置</h3><p>第一个配置的即为个人用户名与电子邮件地址，每次进行<code>Git</code>提交时，都会引用这两条信息，用于说明谁提交了更新。所以该部分内容将被永久载入历史记录中。<br>这里的<code>--global</code>表示该配置只适用于该用户。当为<code>--system</code>时，适用于所有用户。如果没填，则为当前项目Git目录的配置。</p>
<pre><code class="hljs git">$ git config --global user.name &quot;liuxianan&quot; # 你的git用户名，非昵称
$ git config --global user.email  &quot;xxx@qq.com&quot; # 填写你的git邮箱</code></pre>

<h2 id="Git基础使用"><a href="#Git基础使用" class="headerlink" title="Git基础使用"></a>Git基础使用</h2><p>Git的使用推荐阅读《Pro Git》的中文文档：<a href="https://gitee.com/progit/" target="_blank" rel="noopener">传送门</a><br>当然你也可以利用<code>git help</code>命令获取帮助。</p>
<h3 id="从当前目录初始化新仓库"><a href="#从当前目录初始化新仓库" class="headerlink" title="从当前目录初始化新仓库"></a>从当前目录初始化新仓库</h3><pre><code class="hljs git">$ git init # 对现有的某个项目开始用Git管理

$ git add . # 将该目录下的所有文件纳入版本控制
$ git add xxx # 将该目录下的xxx文件纳入版本控制
$ git commit -m &#39;initial project version&#39; # 提交文件并标注修改内容</code></pre>

<h3 id="从现有仓库克隆"><a href="#从现有仓库克隆" class="headerlink" title="从现有仓库克隆"></a>从现有仓库克隆</h3><pre><code class="hljs git">$ git clone [url] # 将仓库克隆到当前目录</code></pre>

<h3 id="工作区、暂存区"><a href="#工作区、暂存区" class="headerlink" title="工作区、暂存区"></a>工作区、暂存区</h3><pre><code class="hljs git">$ git status # 查询当前目录的文件修改情况，是否暂存

$ git diff # 查询尚未暂存的文件更新了哪些部分
$ git diff --staged # 查看已经暂存的文件与上次提交快照的差异 --cached

$ git add xxx # 将xxx文件提交至暂存区，下次提交时即会一并记录到仓库</code></pre>

<h3 id="忽略文件"><a href="#忽略文件" class="headerlink" title="忽略文件"></a>忽略文件</h3><p>使用<code>git</code>要养成一开始就设置好 <code>.gitignore</code> 文件的习惯，以免将来误提交这类无用的文件。<br>文件 <code>.gitignore</code> 的格式规范如下：<br>所有空行或者以注释符号 <code>＃</code> 开头的行都会被 <code>Git</code> 忽略。<br>可以使用标准的 <code>glob</code> 模式匹配。<br>匹配模式最后跟反斜杠（<code>/</code>）说明要忽略的是目录。<br>要忽略指定模式以外的文件或目录，可以在模式前加上惊叹号（<code>!</code>）取反。  </p>
<pre><code class="hljs git"># 此为注释 – 将被 Git 忽略
    # 忽略所有 .a 结尾的文件
    *.a
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略项目根目录下的 TODO 文件，不包括 subdir&#x2F;TODO
    &#x2F;TODO
    # 忽略 build&#x2F; 目录下的所有文件
    build&#x2F;
    # 会忽略 doc&#x2F;notes.txt 但不包括 doc&#x2F;server&#x2F;arch.txt
    doc&#x2F;*.txt</code></pre>

<h3 id="提交更新"><a href="#提交更新" class="headerlink" title="提交更新"></a>提交更新</h3><pre><code class="hljs git">$ git commit # 将暂存区域提交至仓库，推荐先用git status查看是否暂存

$ git commit -m &quot;msg&quot; # 提交更新，并记录说明</code></pre>

<h3 id="移除文件"><a href="#移除文件" class="headerlink" title="移除文件"></a>移除文件</h3><p>从 <code>Git</code> 中移除某个文件，就必须要从已跟踪文件清单中移除（确切地说，是从暂存区域移除），然后提交。</p>
<pre><code class="hljs git">$ rm xxx # 从项目目录中删除

$ git rm xxx # 记录此次移除文件的记录</code></pre>

<p>最后提交的时候，该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话，则必须要用强制删除选项 <code>-f</code>（译注：即 <code>force</code> 的首字母），以防误删除文件后丢失修改的内容。</p>
<p>如果想把文件从 <code>Git</code> 仓库中删除（亦即从暂存区域移除），但仍然希望保留在当前工作目录中。换句话说，仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 <code>.a</code> 编译文件，不小心纳入仓库后，要移除跟踪但不删除文件，以便稍后在 <code>.gitignore</code> 文件中补上，用 <code>--cached</code> 选项即可</p>
<pre><code class="hljs git">$ git rm --cached xxx

$ git rm log&#x2F;\xxx # glob模式</code></pre>

<h3 id="移动文件"><a href="#移动文件" class="headerlink" title="移动文件"></a>移动文件</h3><p>不像其他的 VCS 系统，Git 并不跟踪文件移动操作。如果在 Git 中重命名了某个文件，仓库中存储的元数据并不会体现出这是一次改名操作。不过 Git 非常聪明，它会推断出究竟发生了什么，至于具体是如何做到的，我们稍后再谈。  </p>
<pre><code class="hljs git">$ git mv file_name1 file_name2

## git实际操作
$ mv README.txt README
    $ git rm README.txt
    $ git add README</code></pre>

<h3 id="查看提交历史"><a href="#查看提交历史" class="headerlink" title="查看提交历史"></a>查看提交历史</h3><p>内容过多，直接列出命令</p>
<pre><code class="hljs git">$ git log # 查看提交历史

$ git log -p # 查看每次提交的内容差异

$ git log -p -2 # 查看近两次提交的内容差异

$ git log --stat #仅显示简要的增改行数统计

$ git log --pretty&#x3D;online
$ git log --pretty&#x3D;short
$ git log --pretty&#x3D;full
$ git log --pretty&#x3D;fuller</code></pre>

<pre><code class="hljs perl">$ git <span class="hljs-keyword">log</span> --pretty=<span class="hljs-keyword">format</span>:<span class="hljs-string">"%h - %an, %ar : %s"</span>
<span class="hljs-comment"># 选项 说明</span>
    %H 提交对象（commit）的完整哈希字串
    %h 提交对象的简短哈希字串
    %T 树对象（tree）的完整哈希字串
    %t 树对象的简短哈希字串
    %P 父对象（parent）的完整哈希字串
    %p 父对象的简短哈希字串
    %an 作者（author）的名字
    %ae 作者的电子邮件地址 
    %ad 作者修订日期（可以用 -date= 选项定制格式）
    %ar 作者修订日期，按多久以前的方式显示
    %cn 提交者(committer)的名字
    %ce 提交者的电子邮件地址
    %cd 提交日期
    %cr 提交日期，按多久以前的方式显示
    %s 提交说明

$ git <span class="hljs-keyword">log</span> --since=<span class="hljs-number">2</span>.weeks <span class="hljs-comment"># 按照实际做限制，最近2周</span>

$ git <span class="hljs-keyword">log</span> --since, --after <span class="hljs-comment">#仅显示指定时间之后的提交。</span>
$ git <span class="hljs-keyword">log</span> --<span class="hljs-keyword">until</span>, --before <span class="hljs-comment">#仅显示指定时间之前的提交。</span>
$ git <span class="hljs-keyword">log</span> --author <span class="hljs-comment">#仅显示指定作者相关的提交。</span>
$ git <span class="hljs-keyword">log</span> --committer <span class="hljs-comment">#仅显示指定提交者相关的提交。</span></code></pre>

<h3 id="撤销操作"><a href="#撤销操作" class="headerlink" title="撤销操作"></a>撤销操作</h3><h4 id="修改最后一次提交"><a href="#修改最后一次提交" class="headerlink" title="修改最后一次提交"></a>修改最后一次提交</h4><pre><code class="hljs git">$ git commit --amend</code></pre>

<h2 id="END"><a href="#END" class="headerlink" title="END"></a>END</h2>
            </article>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                
                  <div class="post-meta">
                    <i class="iconfont icon-tags"></i>
                    
                      <a class="hover-with-bg" href="/tags/git/">git</a>
                    
                  </div>
                
              </div>
              
                <p class="note note-warning">本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" target="_blank" rel="nofollow noopener noopener">CC BY-SA 4.0 协议</a> ，转载请注明出处！</p>
              
              
                <div class="post-prevnext row">
                  <div class="post-prev col-6">
                    
                    
                      <a href="/2020/05/08/gituse2/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">Git的使用教程(二)</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </div>
                  <div class="post-next col-6">
                    
                    
                      <a href="/2020/05/04/hexo+github/">
                        <span class="hidden-mobile">Hexo配合Git搭建双平台个人博客</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </div>
                </div>
              
            </div>

            
          </div>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div id="tocbot"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    
  </main>

  
    <a id="scroll-top-button" href="#" role="button">
      <i class="iconfont icon-arrowup" aria-hidden="true"></i>
    </a>
  

  
    <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
  

  

  

  <footer class="mt-5">
  <div class="text-center py-3">
    <div>
      <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a>
      <i class="iconfont icon-love"></i>
      <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener">
        <span>Fluid</span></a>
    </div>
    

    

    
  </div>
</footer>

<!-- SCRIPTS -->
<script  src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js" ></script>
<script  src="https://cdn.staticfile.org/twitter-bootstrap/4.4.1/js/bootstrap.min.js" ></script>
<script  src="/js/debouncer.js" ></script>
<script  src="/js/main.js" ></script>

<!-- Plugins -->


  
    <script  src="/js/lazyload.js" ></script>
  



  <script defer src="https://cdn.staticfile.org/clipboard.js/2.0.6/clipboard.min.js" ></script>
  <script  src="/js/clipboard-use.js" ></script>







  <script  src="https://cdn.staticfile.org/tocbot/4.11.1/tocbot.min.js" ></script>
  <script>
    $(document).ready(function () {
      var boardCtn = $('#board-ctn');
      var boardTop = boardCtn.offset().top;

      tocbot.init({
        tocSelector: '#tocbot',
        contentSelector: 'article.markdown-body',
        headingSelector: 'h1,h2,h3,h4,h5,h6',
        linkClass: 'tocbot-link',
        activeLinkClass: 'tocbot-active-link',
        listClass: 'tocbot-list',
        isCollapsedClass: 'tocbot-is-collapsed',
        collapsibleClass: 'tocbot-is-collapsible',
        collapseDepth: 0,
        scrollSmooth: true,
        headingsOffset: -boardTop
      });
      if ($('.toc-list-item').length > 0) {
        $('#toc').css('visibility', 'visible');
      }
    });
  </script>



  <script  src="https://cdn.staticfile.org/typed.js/2.0.11/typed.min.js" ></script>
  <script>
    var typed = new Typed('#subtitle', {
      strings: [
        '  ',
        "Git的使用教程(一)&nbsp;",
      ],
      cursorChar: "_",
      typeSpeed: 70,
      loop: false,
    });
    typed.stop();
    $(document).ready(function () {
      $(".typed-cursor").addClass("h2");
      typed.start();
    });
  </script>



  <script  src="https://cdn.staticfile.org/anchor-js/4.2.2/anchor.min.js" ></script>
  <script>
    anchors.options = {
      placement: "right",
      visible: "hover",
      
    };
    var el = "h1,h2,h3,h4,h5,h6".split(",");
    var res = [];
    for (item of el) {
      res.push(".markdown-body > " + item)
    }
    anchors.add(res.join(", "))
  </script>



  <script  src="/js/local-search.js" ></script>
  <script>
    var path = "/local-search.xml";
    var inputArea = document.querySelector("#local-search-input");
    inputArea.onclick = function () {
      searchFunc(path, 'local-search-input', 'local-search-result');
      this.onclick = null
    }
  </script>



  <script  src="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.staticfile.org/fancybox/3.5.7/jquery.fancybox.min.css" />

  <script>
    $('#post img:not(.no-zoom img, img[no-zoom]), img[zoom]').each(
      function () {
        var element = document.createElement('a');
        $(element).attr('data-fancybox', 'images');
        $(element).attr('href', $(this).attr('src'));
        $(this).wrap(element);
      }
    );
  </script>




















</body>
</html>
